package com.zenithmind.task.service.base;

import java.util.List;

/**
 * 任务分配管理服务接口
 * 遵循接口隔离原则：专门处理任务分配相关操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskAssignmentManagementService {

    /**
     * 分配任务
     * 
     * @param taskId 任务ID
     * @param assigneeId 被分配人ID
     * @param assignmentType 分配类型
     * @param rolePermission 角色权限
     * @param note 分配说明
     * @param userId 分配人ID
     * @return 分配结果
     */
    Boolean assignTask(String taskId, String assigneeId, Integer assignmentType, 
                      Integer rolePermission, String note, String userId);

    /**
     * 批量分配任务
     * 
     * @param taskId 任务ID
     * @param assigneeIds 被分配人ID列表
     * @param assignmentType 分配类型
     * @param userId 分配人ID
     * @return 分配结果
     */
    Boolean batchAssignTask(String taskId, List<String> assigneeIds, Integer assignmentType, String userId);

    /**
     * 取消分配
     * 
     * @param taskId 任务ID
     * @param assigneeId 被分配人ID
     * @param userId 操作者ID
     * @return 取消结果
     */
    Boolean unassignTask(String taskId, String assigneeId, String userId);

    /**
     * 接受分配
     * 
     * @param assignmentId 分配ID
     * @param userId 用户ID
     * @return 接受结果
     */
    Boolean acceptAssignment(String assignmentId, String userId);

    /**
     * 拒绝分配
     * 
     * @param assignmentId 分配ID
     * @param reason 拒绝原因
     * @param userId 用户ID
     * @return 拒绝结果
     */
    Boolean rejectAssignment(String assignmentId, String reason, String userId);

    /**
     * 转移任务负责人
     * 
     * @param taskId 任务ID
     * @param fromUserId 原负责人ID
     * @param toUserId 新负责人ID
     * @param userId 操作者ID
     * @return 转移结果
     */
    Boolean transferTask(String taskId, String fromUserId, String toUserId, String userId);
}
